Today, many networked computing systems are widely deployed to allow client machines to use remote computing resources. For example, a company may provide a networked file system to allow employees of the company to access or use data stored remotely.
Conventionally, applications running on a client machine can get exclusive access or usage of some networked computing resources by placing a lock on the remote computing resources. For example, an application running on a client machine may place a lock on a file stored remotely on a server. Then other applications, which may run on the client machine or on another client machine, cannot use the file. Thus, the application having the lock on the file does not have to worry about the file being changed by another application while the application is using the file. Furthermore, the application can ensure that update of the file is completed before other applications can use the file.
However, the lock may be lost under certain circumstances, such as loss of network connectivity between the client machine and the server, the server being rebooted, etc. When a lock is lost, a conventional client machine typically informs the application that some computing resources have been lost. For example, in some conventional UNIX-like platforms, a kernel running on the client machine sends a signal SIGLOST to an application when a file lock used by the application is lost. When the application receives the signal SIGLOST, the application becomes aware that something is lost. But the application cannot tell from the signal SIGLOST what is lost because the signal SIGLOST provides no information about the lost file lock.